//---------------------------------------------------------------------------

#ifndef EscenaH
#define EscenaH

#include <fstream>
#include <gl\gl.h>
#include <gl\glu.h>
#include <math.h>
#include "Lista.h"
#include "DibujoDeLineas.h"
//---------------------------------------------------------------------------
const GLdouble porcentaje_roaming=0.1;

class Escena : XMlize<Escena> {
private:
        //dimensiones de la escena
        GLdouble xRight;
        GLdouble xLeft;
        GLdouble yTop;
        GLdouble yBot;

        GLdouble xCentro;
        GLdouble yCentro;

        GLdouble ancho;
        GLdouble alto;
        GLdouble ratio;

        Lista<DibujoDeLineas> *listaDibujos;

        bool _modoEdicion;

        bool _modificada;

        void proyecta_y_pinta();
        void zoom(double);
public:
        Escena(GLdouble,GLdouble,GLdouble,GLdouble);
        ~Escena(){delete listaDibujos;};
        void GLScene();
        void resize(GLdouble,GLdouble,GLdouble,GLdouble);

        GLdouble getXR(){return xRight;};
        GLdouble getXL(){return xLeft;};
        GLdouble getYB(){return yBot;};
        GLdouble getYT(){return yTop;};

        GLdouble getAlto(){return alto;};
        GLdouble getAncho(){return ancho;};
        GLdouble getRatio(){return ratio;};

        void entraModoEdicion(){_modoEdicion=true;};
        void salModoEdicion(){_modoEdicion=false;};
        int buscaPunto(GLdouble,GLdouble);
        void muevePuntoCurva(int,double,double);
        void terminaEdicionDibujo();

        void zoomIn(double);
        void zoomOut(double);

        void traslada_up();
        void traslada_down();
        void traslada_izq();
        void traslada_drch();

        void ponSegmento(Segmento*);
        void ponPoligono(GLdouble,GLdouble,GLdouble,GLint);
        void ponCurva(Lista<PV2D>*,GLint,bool);
        void ponCurva(PV2D**,GLint,GLint,bool);
        void terminaDibujito();

        void ponDibujo(DibujoDeLineas*);

        bool guardaEscena(String);

        bool recortaEscena(GLdouble,GLdouble,GLdouble,GLdouble);

        AnsiString toXM();
        static Escena* fromXM(XM*);
};
//---------------------------------------------------------------------------
#endif
